﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Sistema_Totem.Logica.Excepciones;
using Sistema_Totem.Logica.Clases;


namespace Sistema_Totem.Datos.SqlServer
{

    public class SqlServerErs
    {
        private Conexion conn = new Conexion();

        /// <summary>
        /// Agrega un nuevo ERS
        /// </summary>
        /// <param name="codigo">Variable codigo del Documento ERS</param> 
        public void AgregarErs(String codigo)
        {
            SqlCommand sqlcmd = new SqlCommand();

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "InsertarErs";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@codigo", codigo);
                sqlcmd.Parameters.Add(ProyName);
                sqlcmd.ExecuteNonQuery();

            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Agrega una seccion al documento
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion</param>
        public void AgregaPlanProySecc(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "insertarseccion";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@seccion", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                sqlcmd.ExecuteNonQuery();

            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Agrega un elemento al documento
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion a la cual pertenece el elemento a agrergar</param>
        /// <param name="NombreElemento">Variable con el nombre del elemento a agregar</param>
        public void AgregaPlanProyElem(String NombreProyecto, String NombreSeccion, String NombreElemento)
        {
            SqlCommand sqlcmd = new SqlCommand();

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "insertarelemento";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@elemento", NombreElemento);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@seccion", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                sqlcmd.ExecuteNonQuery();

            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Agrega el contenido introducido al elemento especificado
        /// </summary>
        /// <param name="NombreElemento">Variable con el nombre del elemento</param>
        /// <param name="Contenido">Variable con el contenido a introducir </param>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="IdErs">Variable con el ID del documento ERS</param>
        public void AgregaContenidoElemento(String NombreElemento, String Contenido, String NombreProyecto, int IdErs)
        {
            SqlCommand sqlcmd = new SqlCommand();

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "InsertContenidoElemento";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@Elemento", NombreElemento);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@Contenido", Contenido);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@Proy", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@IdErs", IdErs);
                sqlcmd.Parameters.Add(ProyName);
                sqlcmd.ExecuteNonQuery();

            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda de secciones ERS para un proyecto
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve una lista de Strings con las secciones</returns>
        public List<String> SelectSeccionesErs(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> secciones = new List<String>();
            String resultado = "";

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectSeccionesErs";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_SECCION"].ToString();
                    secciones.Add(resultado);
                }
                return secciones;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda de las secciones ERS elegidas por el usuario u obligatorias
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve un lista de Strings con las secciones</returns>
        public List<String> SelectSeccionesFijadas(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> secciones = new List<String>();
            String resultado = "";

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectSeccionesFijadas";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_SECCION"].ToString();
                    secciones.Add(resultado);
                }
                return secciones;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda de los elementos de una seccion de ERS que poseen contenido
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion especificada</param>
        /// <returns>Devuelve una lista de Strings con los elementos que poseen contenido</returns>
        public List<String> SelectElementosSeccionErs(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";


            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectElementosSeccionErs";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomSec", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;

                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_ELEMENTO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda de los elementos de una seccion especificada de ERS
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion</param>
        /// <returns>Devuelve una lista de Strings con los nombre de los elementos</returns>
        public List<String> SelectElementosSeccionErs2(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";


            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectElementosSeccionErs2";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomSec", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;

                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_ELEMENTO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// hace la busqueda de los elementos de una seccion de ERS que fueron elegidos por el usuario u 
        /// obligatorios y su tipo de elemento
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion especificada</param>
        /// <returns>Devuelve una lista de Strings con el nombre del elemento y su tipo</returns>
        public List<String> SelectElementosComponentesErs(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";


            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectElementosComponentesErs";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomSec", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;

                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBREELEMENTO"].ToString() + "@" + sqlrd["NOMBRE_TIPOELEMENTO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda de los elementos de una seccion de ERS con su tipo de elemento y tipo de dato
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion especificada</param>
        /// <param name="NombreElemento">Variable con el nombre del elemento</param>
        /// <returns></returns>
        public String SelectElementosComponentesErs2(String NombreProyecto, String NombreSeccion, String NombreElemento)
        {
            SqlCommand sqlcmd = new SqlCommand();
            String resultado = "";

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectElementosComponentesErs2";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomSec", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomElem", NombreElemento);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;

                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_ELEMENTO"].ToString()
                        + "@" + sqlrd["COMPONENTE"].ToString() + "@" + sqlrd["TIPO_DATO"].ToString();
                }
                return resultado;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda del ID ERS dado su nombre
        /// </summary>
        /// <param name="codigo">Variable con el codigo asignado al documento ERS</param>
        /// <returns>Devuelve el ID del documento ERS</returns>
        public int SelectIdErs(String codigo)
        {
            SqlCommand sqlcmd = new SqlCommand();
            int resultado = 0;

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectIdErs";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@CODIGO", codigo);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = int.Parse(sqlrd["ID_ERS"].ToString());
                }
                return resultado;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return 0;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return 0;
            }

            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda del ID ERS dado el nombre del proyecto
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve el ID del documento ERS</returns>
        public int SelectIdErsExistente(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            int resultado = 0;

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectIdErsExistente";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NOMPROY", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = int.Parse(sqlrd["ID_ERS"].ToString());
                }
                return resultado;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return 0;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return 0;
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda del todos los elementos que contienen contenido
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve una lista de Strings con los elementos que poseen contenido asignado</returns>
        public List<String> SelectContenidoElemento(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> ListaResult = new List<String>();
            String resultado = "";

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectContenidoElemento";
                sqlcmd.CommandTimeout = 2;

                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;

                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["CONTENIDO"].ToString()
                        + "@" + sqlrd["NOMBRE_ELEMENTO"].ToString() + "@" + sqlrd["NOMBRE_SECCION"].ToString();
                    ListaResult.Add(resultado);
                }
                return ListaResult;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Realiza la actualizacion del contenido de un elemento
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion a la cual pertenece el elemento a actualizar</param>
        /// <param name="NombreElemento">Variable con el elemento cuyo contenido se actualizara</param>
        /// <param name="contenido">Variable con el contenido a actualizar</param>
        public void ActualizaCont(String NombreProyecto, String NombreSeccion, String NombreElemento, String contenido)
        {
            SqlCommand sqlcmd = new SqlCommand();

            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "ActualizaCont";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@NomPr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomSec", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@NomElem", NombreElemento);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@Cont", contenido);
                sqlcmd.Parameters.Add(ProyName);
                sqlcmd.ExecuteNonQuery();

            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
            }

            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }

            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda de la ultima version del historial de revisiones
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve un string con el nombre del proyecto</returns>
        public String Version(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "version";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["contenido"].ToString();
                }

                return resultado;
            }

            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda del titulo de la portada 
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion</param>
        /// <returns>Devuelve un string con el nombre de la portada</returns>
        public String SelectTituloPortada(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectTituloPortada";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@seccion", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["CONTENIDO"].ToString();
                }
                return resultado;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda del cliente involucrado en el proyecto
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve un string con nombre del cliente</returns>
        public string NombreCliente(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "NombreCliente";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE"].ToString();
                }
                return resultado;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda del contenido de todos los elementos de la seccion especificada
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion especificada</param>
        /// <returns>Devuelve una lista de Strings con el contenido de todos los elementos de la seccion</returns>
        public List<String> Selecthistorialelemento(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectContenido";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@seccion", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["CONTENIDO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda del elemento y su contenido para la seccion especificada
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <param name="NombreSeccion">Variable con el nombre de la seccion especificada</param>
        /// <returns>Devuelve una lista de Strings con nombres de elementos y contenidos</returns>
        public List<String> SelectContenidoNombre(String NombreProyecto, String NombreSeccion)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SelectContenidoNombre";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombre", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                ProyName = new SqlParameter("@seccion", NombreSeccion);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_ELEMENTO"].ToString();
                    elementos.Add(resultado);
                    resultado = sqlrd["CONTENIDO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }

        }

        /// <summary>
        /// Hace la busqueda de las secciones definidas como obligatorias
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve una lista de Strings con las secciones obligatorias</returns>
        public List<String> SeccionesObligatorias(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "SeccionesObligatorias";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombrepr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_SECCION"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }
        }

        /// <summary>
        /// Hace la busqueda de los elementos definidos como obligatorios
        /// </summary>
        /// <param name="NombreProyecto">Variable con el nombre del proyecto</param>
        /// <returns>Devuelve un lista de strings con los elementos obligatorios</returns>
        public List<String> ElementosObligatorios(String NombreProyecto)
        {
            SqlCommand sqlcmd = new SqlCommand();
            List<String> elementos = new List<String>();
            String resultado = "";
            try
            {
                conn.AbrirConexionBd();
                sqlcmd.Connection = conn.ObjetoConexion();
                sqlcmd.CommandType = CommandType.StoredProcedure;
                sqlcmd.CommandText = "ElementosObligatorios";
                sqlcmd.CommandTimeout = 2;
                SqlParameter ProyName = new SqlParameter("@nombrepr", NombreProyecto);
                sqlcmd.Parameters.Add(ProyName);
                SqlDataReader sqlrd;
                sqlrd = sqlcmd.ExecuteReader();
                while (sqlrd.Read())
                {
                    resultado = sqlrd["NOMBRE_SECCION"].ToString() + "@" + sqlrd["NOMBRE_ELEMENTO"].ToString();
                    elementos.Add(resultado);
                }
                return elementos;
            }
            catch (ErrorConexionException S)
            {
                Console.WriteLine(S.MensajeError());
                return null;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
                return null;
            }
            finally
            {
                conn.CerrarConexionBd();
            }
        }
    }
}